home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Peter Lewis / PNL Libraries / MyTEPrinting.p < prev    next >
Encoding:
Text File  |  1994-08-04  |  1.7 KB  |  77 lines  |  [TEXT/PJMM]

  1. unit MyTEPrinting;
  2.  
  3. interface
  4.  
  5.     uses
  6.         MyPrinting;
  7.  
  8.     type
  9.         TEPObject = object(PObject)
  10.                 te: TEHandle;
  11.                 function CountPages (r: rect): integer;
  12.                 override;
  13.                 procedure DrawPage (r: rect; gp: GrafPtr; pg: integer; first, last: boolean);
  14.                 override;
  15.             end;
  16.  
  17. implementation
  18.  
  19. {$S Printing}
  20.     function GetNextStart (r: rect; startline: integer; te: TEHandle): integer;
  21.         var
  22.             hite, endline: integer;
  23.     begin
  24.         with r do
  25.             hite := bottom - top;
  26.         endline := startline;
  27.         while (endline <= te^^.nLines) & (TEGetHeight(endline, startline, te) < hite) do
  28.             endline := endline + 1;
  29.         GetNextStart := endline;
  30.     end;
  31.  
  32. {$S Printing}
  33.     function TEPObject.CountPages (r: rect): integer;
  34.         var
  35.             count, startline: integer;
  36.     begin
  37.         count := 0;
  38.         startline := 1;
  39.         while startline <= te^^.nLines do begin
  40.             startline := GetnextStart(r, startline, te);
  41.             count := count + 1;
  42.         end;
  43.         CountPages := count;
  44.     end;
  45.  
  46. {$S Printing}
  47.     procedure TEPObject.DrawPage (r: rect; gp: GrafPtr; pg: integer; first, last: boolean);
  48.         var
  49.             startline, endline, i, offset: integer;
  50.             oldport, oldinport: GrafPtr;
  51.             vr, dr: rect;
  52.     begin
  53.         Getport(oldport);
  54.         SetPort(gp);
  55.         oldinport := te^^.inPort;
  56.         te^^.inPort := gp;
  57.         vr := te^^.viewRect;
  58.         dr := te^^.destRect;
  59.         startline := 1;
  60.         for i := 1 to pg - 1 do
  61.             startline := GetNextStart(r, startline, te);
  62.         endline := GetNextStart(r, startline, te) - 1;
  63.         r.bottom := r.top + TEGetHeight(endline, startline, te);
  64.         if startline = 1 then
  65.             offset := 0
  66.         else
  67.             offset := TEGetHeight(startline - 1, 1, te);
  68.         te^^.viewRect := r;
  69.         te^^.destRect.top := te^^.viewRect.top - offset;
  70.         TEUpdate(r, te);
  71.         te^^.viewRect := vr;
  72.         te^^.destRect := dr;
  73.         te^^.inPort := oldinport;
  74.         Setport(oldport);
  75.     end;
  76.  
  77. end.